package pl.edu.pk.psb.bc.assembler;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.ds.CzasPrzejazduDs;
import pl.edu.pk.psb.bc.ds.PolaczenieDs;
import pl.edu.pk.psb.bc.ds.TrasaDs;
import pl.edu.pk.psb.bc.dto.PolaczenieDto;
import pl.edu.pk.psb.bc.dto.TrasaDto;

@Component
public class TrasaAssembler {

	@Autowired
	PrzystanekAssembler przystanekAssembler;

	@Autowired
	PolaczenieAssembler polaczenieAssembler;

	public TrasaDs konwertuj(TrasaDto dto, PolaczenieDs polaczenieDs) {
		TrasaDs ds = new TrasaDs();
		ds.setKolejnosc(dto.getKolejnoscWpolaczeniu());
		ds.setPolaczenie(polaczenieDs);
		ds.setCzasPrzyjazdu(dto.getCzasPrzyjazdu());
		ds.setCzasOdjazdu(dto.getCzasOdjazdu());
		if (dto.getId() > 0)
			ds.setId(dto.getId());
		ds.setPrzystanek(przystanekAssembler.konwertuj(dto.getPrzystanek()));
		return ds;
	}

	public List<TrasaDs> konwertujDoDs(List<TrasaDto> listaTrasy,
			PolaczenieDs polaczenieDs) {
		List<TrasaDs> trasaDs = new ArrayList<TrasaDs>();
		for (TrasaDto trasaDto : listaTrasy) {
			trasaDs.add(konwertuj(trasaDto, polaczenieDs));
		}
		return trasaDs;
	}

	public TrasaDto konwertuj(TrasaDs ds, PolaczenieDto polaczenieDto) {
		TrasaDto dto = new TrasaDto();
		dto.setKolejnoscWpolaczeniu(ds.getKolejnosc());
		dto.setCzasPrzyjazdu(ds.getCzasPrzyjazdu());
		dto.setCzasOdjazdu(ds.getCzasOdjazdu());
		SimpleDateFormat sdf = new SimpleDateFormat("mm");
		dto.setMinutaOdjazdu(sdf.format(dto.getCzasOdjazdu().getTime()));
		dto.setMinutaPrzyjazdu(sdf.format(dto.getCzasPrzyjazdu().getTime()));
		dto.setPolaczenieDto(polaczenieDto);
		dto.setId(ds.getId());
		dto.setPrzystanek(przystanekAssembler.konwertuj(ds.getPrzystanek()));
		return dto;
	}

	public List<TrasaDto> konwertujDoDto(List<TrasaDs> listaTrasyDs,
			PolaczenieDto polaczenieDto) {
		List<TrasaDto> listaDto = new ArrayList<TrasaDto>();
		for (TrasaDs trasaDto : listaTrasyDs) {
			listaDto.add(konwertuj(trasaDto, polaczenieDto));
		}
		return listaDto;
	}

}
